package com.zj.esproxy.interfaces;

import com.alibaba.fastjson.JSONObject;
import com.zj.esproxy.model.EsInfo;
import com.zj.esproxy.model.EsPage;

/**
 * @author arthur_zhou
 */
public interface EsProxy {

    /**
     * es取数据通用方法 返回json
     *
     * @param esInfo    es信息
     * @param json      请求json
     * @return json
     */
    JSONObject getJsonData(EsInfo esInfo, String json);

    /**
     * es取数据通用方法 clazz和返回json字段完全一致（支持下划线转驼峰）
     * 如果是String、BigDecimal、基础类型包装类，会获取第一列数据。因为是JSONObject,第一列的属性随机，所以尽量用在只查一列时使用基础类型包装类。
     *
     * @param clazz     接收返回结果对象
     * @param esInfo    es信息
     * @param json      请求json
     * @return 分页
     */
    <T> EsPage<T> getData(Class<T> clazz, EsInfo esInfo, String json);

    /**
     * 获取去重总数
     * es取数据通用方法 clazz和返回json字段完全一致（支持下划线转驼峰）
     * 如果是String、BigDecimal、基础类型包装类，会获取第一列数据。因为是JSONObject,第一列的属性随机，所以尽量用在只查一列时使用基础类型包装类。
     *
     * @param clazz     接收返回结果对象
     * @param esInfo    es信息
     * @param json      请求json
     * @return 分页
     */
    <T> EsPage<T> getDistinctData(Class<T> clazz, EsInfo esInfo, String json);
}
